package com.briup.day11;

import com.briup.day11.transform.Base;
import com.briup.day11.transform.Derived;

public class Test_Transform {
    public static void main(String[] args) {
        //测试类
        //将父类引用指向derived
        //将fork子类引用指向父类(Derived)
//强制转换时，b实际指向Derived对象，Derived和Fork
//类型不是子父类关系，所以它是不能转为Fork对象的！

        /*
        * instanceof作用: 左侧引用变量是否执行右侧的子类型对象，如果指向返回true ,不指向返回false*/
        Base base = new Derived();
        if(base instanceof Fork){
            Fork fork=(Fork)base;
            fork.show();
            System.out.println("============");
        } else if (base instanceof  Derived ) {
            Derived derived=(Derived)base;
            derived.disp();
        }
    }
    public static void main02(String[] args) {
//        /、向下转型测试  先向上转型，再向下转型
        //目的:解决无法操作子类特有成员和特有方法
        Base b=new Derived();
        Derived d=(Derived)b;//将子类的引用指向父类的引用
        System.out.println(d.n);
        System.out.println(d.v);
        d.show();
        d.disp();
    }
    public static void main01(String[] args) {
        //向上转型: 将父类的引用指向子类的对象
//        父类引用访问成员变量:编译看左边(父类),运行看左边(父类)
//        父类引用访问成员方法: 编译看左边(父类),运行看左右边(子类)
        //1.隐式转换 自动转换
        Base base = new Derived();
        System.out.println(base.n);
//        System.out.println(base.v);//编译看左边,不能访问
        base.show();
    }
}
class Fork extends Base {
    @Override
    public void show() {
        System.out.println(" in Fork...."+n);
    }
}
